<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

require_once APPLICATION_PATH .'/models/Mapper/BaseMapper.php';
require_once 'Zend/Db/Statement/Exception.php';

/**
 * Description of TiposDocumentosMapper
 *
 * @author kristian
 */
class Spalm_Model_Mapper_TiposDocumentosMapper extends Spalm_Model_Mapper_BaseMapper{

//    public function  __construct($dbTable) {
//        //parent($dbTable);
//        $this->setDbTable($dbTable);
//    }

    public function save($tipoDocumento)
    {

        if (!($tipoDocumento instanceof Spalm_Model_Single_TipoDocumentoEntity)){
            throw new Exception('No es un tipo de documento');
        }

        $data = array(
            'sigla'   => $tipoDocumento->getSigla(),
            'nombre' => $tipoDocumento->getNombre()
        );

        $id = $tipoDocumento->getPK();

        // si no tiene id
        // (se creo un nuevo tipoDocumentoEntity y se le asignaron valores)
        if (null === $id) {
            // se evita el id (ya que no existe)
            unset($data['id']);

            try {
            // se inserta en la base de datos
            $this->getDbTable()->insert($data);

            }
            catch (Zend_Db_Statement_Exception $ex){
                system("echo " . $ex->getTraceAsString());
                throw new Zend_Db_Statement_Exception("No se pudo agregar. Chequee que no sea duplicado");
            }

        } else {    // si tiene su id (se habia recuperado de la base de datos)
           
           try {
            // se actualiza el contenido de la base de datos
            $this->getDbTable()->update($data, array('id = ?' => $id));

           }
           catch (Zend_Db_Statement_Exception $ex){
               system("echo " . $ex->getTraceAsString());
                throw new Zend_Db_Statement_Exception("No se pudo actualizar. Chequee no haberse equivocado");
           }
        }
    }


    public function find($id,$tipoDocumento )
    {

        if (!($tipoDocumento instanceof Spalm_Model_Single_TipoDocumentoEntity)){
            throw new Exception('No es un tipo de documento');
        }

        $result = $this->getDbTable()->find($id);
        if (0 == count($result)) {
            return;
        }
        $row = $result->current();
        
        $tipoDocumento->setPK($row->id);
        $tipoDocumento->setSigla($row->sigla);
        $tipoDocumento->setNombre($row->nombre);
    }

    public function fetchAll($where = null)
    {
        $resultSet = $this->getDbTable()->fetchAll($where);
        $entries   = array();

        foreach ($resultSet as $row) {
            $entry = new Spalm_Model_Single_TipoDocumentoEntity();

            $entry->setPK($row->id);
            $entry->setSigla($row->sigla);
            $entry->setNombre($row->nombre);
            $entry->setMapper($this);
            $entries[] = $entry;
        }
        return $entries;
    }

}
?>
